[GitHub Actions]AWS CLI ver1とver2切り替えやマイナーバージョン固定での導入も手軽にできるAction「install-aws-cli-action」を試してみた
はじめに
Terminal上でawscliを実行した時に、以下のメッセージに気が付きました。念の為ActionsのWorkflowでも確認してみましたが同様でした。
Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html
今年始めに AWS CLI のversion2が出てから、DevIOでもたくさんの記事が投稿されました。
ただ、日々のCICD運用においては最新バージョンへの依存が求められない限り、優先順位は低くなりがちです。また、AWSCLI version2は単純にversion1と置き換わるものではないこともあります。そこで、今後バージョン更新が強制される前提を見越した対応を試みました。
GitHub Actions でversion 2を使う
Dockerを用いる方法が用意されているため、それを利用する方法があります。
ただ、個人的にはversion1とversion2を手軽に切り替えることができて、且つマイナーバージョンの固定も可能にしておきたいというのが本音です。実行される度に変わるとトラブルの原因になりかねません。
そこで以下のActionを利用します。これは、version 1とversion 2の指定が手軽にできる上に、マイナーバージョンの固定も可能になっています。
使い方
指定するversion表記を変えるくらいで、後は固定です。
version 1を例にあげます。マイナーバージョンを指定しない、つまりversion: 1
とすることで、version 1の最新がインストールされます。
test_specific_v1: runs-on: ubuntu-latest name: specific v1 steps: - uses: actions/checkout@v2 - id: install-aws-cli uses: unfor19/install-aws-cli-action@v1 with: version: 1.18.137
Actions Workflow上での実動作
該当処理のログを貼っておきます。
Run unfor19/install-aws-cli-action@v1 with: version: 1.18.137 >> [LOG]: Validating semantic version >> [LOG]: Valid version input >> [LOG]: Setting _DOWNLOAD_URL >> [LOG]: _DOWNLOAD_URL = https://s3.amazonaws.com/aws-cli/awscli-bundle-1.18.137.zip >> [LOG]: Checking if the provided version exists in AWS >> [LOG]: Provided version exists - 1.18.137 >> [LOG]: Downloading … -rw-r--r-- 1 root root 17M Sep 11 19:15 unfor19-awscli.zip >> [LOG]: Unzipping unfor19-awscli.zip >> [LOG]: Installing AWS CLI - 1.18.137 Running cmd: /usr/bin/python virtualenv.py --no-download --python /usr/bin/python /usr/local/aws Running cmd: /usr/local/aws/bin/pip install --no-binary :all: --no-cache-dir --no-index --find-links file://. setuptools_scm-3.3.3.tar.gz Running cmd: /usr/local/aws/bin/pip install --no-binary :all: --no-cache-dir --no-index --find-links file://. wheel-0.33.6.tar.gz Running cmd: /usr/local/aws/bin/pip install --no-binary :all: --no-build-isolation --no-cache-dir --no-index --find-links file:///home/runner/work/workflow-test/workflow-test/awscli-bundle/packages awscli-1.18.137.tar.gz Symlink already exists: /usr/local/bin/aws Removing symlink. You can now run: /usr/local/bin/aws --version Note: AWS CLI version 2, the latest major version of the AWS CLI, is now stable and recommended for general use. For more information, see the AWS CLI version 2 installation instructions at: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html >> [LOG]: Installation completed total 17M drwxr-xr-x 3 runner docker 4.0K Nov 19 08:34 . drwxr-xr-x 3 runner docker 4.0K Nov 19 08:33 .. drwxr-xr-x 3 root root 4.0K Nov 19 08:34 awscli-bundle -rw-r--r-- 1 root root 17M Sep 11 19:15 unfor19-awscli.zip total 8.0K drwxr-xr-x 2 runner docker 4.0K Nov 19 08:34 . drwxr-xr-x 3 runner docker 4.0K Nov 19 08:33 .. >> [LOG]: Printing AWS CLI installed version aws-cli/1.18.137 Python/2.7.17 Linux/5.4.0-1031-azure botocore/1.17.60 aws-cli/1.18.137 Python/2.7.17 Linux/5.4.0-1031-azure botocore/1.17.60 ::set-output name=version::
バージョンが切り替わる仕組み
Actionのentrypointにて、バージョンによってダウンロードするインストーラを切り替えています。マイナーバージョンが指定されている際には該当のアーカイブに絞る形です。
set_download_url(){ msg_log "Setting _DOWNLOAD<em>URL" # v1 if [[ $_AWS_CLI_VERSION =~ ^1._$ ]]; then if [[ $_AWS_CLI_VERSION = "1" ]]; then _DOWNLOAD_URL="https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" else _DOWNLOAD_URL="https://s3.amazonaws.com/aws-cli/awscli-bundle-${_AWS_CLI_VERSION}.zip" fi # v2 elif [[ $_AWS_CLI_VERSION =~ ^2._$ ]]; then if [[ $_AWS_CLI_VERSION = "2" ]]; then # Latest v2 _DOWNLOAD_URL="https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" else # Specific v2 _DOWNLOAD_URL="https://awscli.amazonaws.com/awscli-exe-linux-x86</em>64-${_AWS_CLI_VERSION}.zip" fi fi msg_log "_DOWNLOAD_URL = ${_DOWNLOAD_URL}" }
注意点
複数回実行も可能ですが、初回実行時に環境変数に記録されたバージョンを用いて更新を行う形となります。(例:初回ver1でインストールなら、2回目以降にver2を含んでいても、全てver1としてインストール
Run unfor19/install-aws-cli-action@v1 with: version: 2 env: AWS_CLI_VERSION: 1.18.137 echo "AWS_CLI_VERSION=2" >> $GITHUB_ENV sudo /home/runner/work/_actions/unfor19/install-aws-cli-action/v1/entrypoint.sh $AWS_CLI_VERSION >> [LOG]: Checking if the provided version exists in AWS >> [LOG]: Provided version exists - 1.18.137 >> [LOG]: Downloading ... -rw-r--r-- 1 root root 17M Sep 11 19:15 unfor19-awscli.zip >> [LOG]: Unzipping unfor19-awscli.zip >> [LOG]: Installing AWS CLI - 1.18.137
ぱっと見はAWS_CLI_VERSION=2
で更新されているように見えますが、環境変数で直指定されたenv:AWS_CLI_VERSION: 1.18.137
が優先される形です。
あとがき
AWS公式で用意しているActionが存在しないため、先行して作成されているActionを確認していましたが、Starを多く集めていたActionは約12ヶ月前にArchive入した状態でした。
自前で用意するしかないかと思っていたところ、以下のIssueにて12日前についたコメントから今回のActionを見つけました。
個人的にカバーしたい要件を全部満たしているため扱ってみました。自前で用意するにも手間という場合にはおすすめです。